<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="WcoPw" id="WcoPw"><span data-lake-id="uf4d71381" id="uf4d71381">典型回答</span></h1>
  <p data-lake-id="ub1364988" id="ub1364988"><br></p>
  <p data-lake-id="u5f79a26e" id="u5f79a26e"><span data-lake-id="uf26cbf63" id="uf26cbf63">Nacos在单个集群中同时支持AP和CP两种模式，之所以这么设计是因为Nacos目前在业内主要有两种应用，分别是注册中心和配置中心。</span></p>
  <p data-lake-id="ud7b3516a" id="ud7b3516a"><span data-lake-id="uf2b0997a" id="uf2b0997a">​</span><br></p>
  <p data-lake-id="uc7e6f600" id="uc7e6f600"><span data-lake-id="uceaebdbb" id="uceaebdbb">对于注册中心来说，他要提供服务的注册和发现能力，如果使用一个强一致性算法，那么就会对可用性造成一定的影响。而注册中心一旦可用性不能满足了，那么就会影响所有服务的互相调用。而如果一致性没办法做到强一致性的话，最多是可能某个服务不在了，但是还会调用过去，理论上来说会失败，然后重试也是可以接受的。</span></p>
  <p data-lake-id="u8ea25834" id="u8ea25834"><span data-lake-id="u6be1cdfd" id="u6be1cdfd">​</span><br></p>
  <p data-lake-id="uc4ba2bb8" id="uc4ba2bb8"><span data-lake-id="ufa083450" id="ufa083450">对于配置中心来说，他的主要职责就是提供统一的配置，一致性是他的一个重点考量，即使损失一点可用性（晚一点推送）也是可以接受的，但是不同的机器接收到配置不一样，这个是不能接受的。</span></p>
  <p data-lake-id="uf94a7258" id="uf94a7258"><span data-lake-id="u89195a6e" id="u89195a6e">​</span><br></p>
  <p data-lake-id="uc63ee9c1" id="uc63ee9c1"><span data-lake-id="u1f74c89a" id="u1f74c89a">所以，Nacos就同时支持这两种模式了，他在CP方面，采用了JRaft（1.0是Raft），在AP方面，采用了Distro</span></p>
  <p data-lake-id="u71853069" id="u71853069"><span data-lake-id="u264b421e" id="u264b421e">​</span><br></p>
  <p data-lake-id="u586f1f71" id="u586f1f71"><span data-lake-id="u7e79edbe" id="u7e79edbe">也就是说，</span><strong><span data-lake-id="u6d093b41" id="u6d093b41">Nacos，为了同时支持注册中心和配置中心，他通过JRaft协议实现了一个CP的模式，又通过Distro协议实现了一个AP的模式，可以在这两者模式之间进行切换。</span></strong></p>
  <p data-lake-id="ua7f7134b" id="ua7f7134b"><span data-lake-id="ucadb3a5b" id="ucadb3a5b">​</span><br></p>
  <p data-lake-id="u4736dad2" id="u4736dad2"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1688466255985-e602796f-b454-4ff0-8a1e-86040f80b958.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_25%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u04d7c969" id="u04d7c969"><span data-lake-id="u7d03a4be" id="u7d03a4be" style="color: rgb(64, 64, 64)">​</span><br></p>
  <p data-lake-id="u3c4a8601" id="u3c4a8601"><span data-lake-id="ua8954390" id="ua8954390"><br></span><span data-lake-id="u8cb0f3f9" id="u8cb0f3f9">JRaft是一个纯 Java 的 Raft 算法实现库, 基于百度 braft 实现而来, 使用 Java 重写了所有功能。通过 RAFT 提供的一致性状态机，可以解决复制、修复、节点管理等问题，极大的简化当前分布式系统的设计与实现，让开发者只关注于业务逻辑，将其抽象实现成对应的状态机即可。Raft 可以解决分布式理论中的 CP，即一致性和分区容忍性，并不能解决 Available 的问题。（</span><a href="https://www.sofastack.tech/projects/sofa-jraft/overview/" target="_blank" data-lake-id="u4d1b3278" id="u4d1b3278"><span data-lake-id="u415cc7e7" id="u415cc7e7">https://www.sofastack.tech/projects/sofa-jraft/overview/</span></a><span data-lake-id="u13225b71" id="u13225b71"> ）</span></p>
  <p data-lake-id="u44765dd5" id="u44765dd5"><br></p>
  <p data-lake-id="u3c719ceb" id="u3c719ceb"><span data-lake-id="u3af77f87" id="u3af77f87">Distro是Nacos自研AP分布式协议，是面向临时实例设计的一种分布式协议，保证了在某些Nacos节点宕机后，整个临时处理系统依旧可以正常工作。Distro协议的设计思想：</span></p>
  <ul list="ua47d270e">
   <li fid="u1a03dc70" data-lake-id="u56f42364" id="u56f42364"><span data-lake-id="uc0b5990e" id="uc0b5990e">Nacos 每个节点是平等的都可以处理写请求，同时把新数据同步到其他节点。</span></li>
   <li fid="u1a03dc70" data-lake-id="u270c1130" id="u270c1130"><span data-lake-id="u5951a985" id="u5951a985">每个节点只负责部分数据，定时发送自己负责数据的校验值到其他节点来保持数据一致性。</span></li>
   <li fid="u1a03dc70" data-lake-id="u741f1eab" id="u741f1eab"><span data-lake-id="u67a738a0" id="u67a738a0">每个节点独立处理读请求，及时从本地发出响应。</span></li>
  </ul>
  <p data-lake-id="uec581c59" id="uec581c59"><span data-lake-id="ue3fc08d3" id="ue3fc08d3"> </span></p>
  <p data-lake-id="uac464aab" id="uac464aab"><span data-lake-id="ub8e7062e" id="ub8e7062e">参考：</span><a href="https://blog.csdn.net/zcrzcrzcrzcrzcr/article/details/122260705" target="_blank" data-lake-id="ub6392e40" id="ub6392e40"><span data-lake-id="ub6d82d93" id="ub6d82d93">https://blog.csdn.net/zcrzcrzcrzcrzcr/article/details/122260705</span></a></p>
 </body>
</html>